home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / jaz_clib.arc / JZMENU.DMO < prev    next >
Text File  |  1989-04-09  |  5KB  |  166 lines

  1. #include <jaz.h>        /* define misc macros and types */
  2. #include <jzscreen.h>        /* define window types and colors    */
  3. #include <gscreen.h>        /* define global window characteristics */
  4. #include <stdio.h>        /* standard c stuff            */
  5. #include <process.h>        /* ms/c exec call stuff         */
  6.  
  7. #if DEBUG
  8.   #include <stdlib.h>
  9. #endif
  10.  
  11. #define COPYWRITE "JZMENU   (C) JazSoft 1986 by Jack A. Zucker @ 301-794-5950 |\
  12.  CIS: 75766,1336"
  13.  
  14.  
  15. main(argc,argv)
  16. int argc;
  17. char **argv;
  18. {
  19.  
  20.   int w,w2;            /* work integer     */
  21.   int NUMITEMS;         /* count of menu items    */
  22.   int wchoice;            /* users program choice */
  23.   int wresult;            /* result of exec call    */
  24.   char wpgm[65];        /* hold the program name*/
  25.   char wstr[80];        /* work string variable */
  26.   char wname[64];        /* menu file name    */
  27.   char *wargv[23][9];        /* pointer to command line strings */
  28.   char *malloc();        /* allocate memory space for command args */
  29.   char *realloc();        /* re-allocate memory space for sub parms */
  30.   FILE *fd;
  31.   char wsbuf[256],wdbuf[256],*ch;
  32.   char    *wmenu[23];        /* hold the menu text */
  33.   char    *wprog[23];        /* hold the program names */
  34.   int     wargc[23];        /* hold argument counts   */
  35.  
  36.  /****************************************************************************/
  37.  /*                  Main Program                     */
  38.  /****************************************************************************/
  39.  
  40.   *wstr = 0;            /* initialize work strings  */
  41.   *wpgm = 0;
  42.  
  43.   if (argc < 2) {
  44.     printf("\nNo menu file specified");
  45.     exit(1);
  46.   }
  47.  
  48.   strcpy(wname,*++argv);    /* get menu file name */
  49.  
  50.   /* initialize the entire array of pointers so we can use realloc later */
  51.   for (w = 0 ; w < 23 ; w ++) {
  52.     for (w2 = 0 ; w2 < 9 ; w2 ++)
  53.       wargv[w][w2] = malloc(1);
  54.     wmenu[w] = malloc(1);
  55.     wprog[w] = malloc(1);
  56.   }
  57.  
  58.   do {
  59.  
  60.     if (!(fd = fopen(wname,"r"))) {    /* does the file exist */
  61.       printf(**argv ? "\n%s Not found!" : "\nNo menu file specified" ,*argv);
  62.       exit(1);
  63.     }
  64.  
  65.     NUMITEMS = -1;
  66.  
  67.     while (fgets(wsbuf,255,fd)) {
  68.       if (*wsbuf) {
  69.     NUMITEMS ++;
  70.     wsbuf[strlen(wsbuf)-1] = 0;    /* get rid of "\r" */
  71.     jzgetpce(wsbuf,wdbuf,',',1);   /* parse out the menu description */
  72.     wmenu[NUMITEMS] = (char *) realloc(wmenu[NUMITEMS],strlen(wdbuf)+1);
  73.     strcpy(wmenu[NUMITEMS],wdbuf);
  74.     jzgetpce(wsbuf,wdbuf,',',2);   /* parse out the program name */
  75.     wprog[NUMITEMS] = realloc(wprog[NUMITEMS],strlen(wdbuf)+1);
  76.     strcpy(wprog[NUMITEMS],wdbuf);
  77.     for (w = 0 ; w < 9 ; w ++) {
  78.       jzgetpce(wsbuf,wdbuf,',',w+2);
  79.       if (! *wdbuf || *wdbuf == '\n') {
  80.         wargv[NUMITEMS][w] = realloc(wargv[NUMITEMS][w],1);
  81.         wargv[NUMITEMS][w] = 0;
  82.         break;
  83.       }
  84.       else {
  85.         wargv[NUMITEMS][w] = realloc(wargv[NUMITEMS][w],strlen(wdbuf)+1);
  86.         strcpy(wargv[NUMITEMS][w],wdbuf);
  87.       }
  88.     }
  89.       }
  90.     }
  91.  
  92.     fclose(fd);
  93.  
  94.     #if DEBUG
  95.       for (w = 0 ; w < 9 ; w ++) {
  96.     for (w2 = 0 ; w2 < 9 ; w2 ++)
  97.       if (! *(wargv[w][w2])) break;
  98.       else
  99.         printf("%s",wargv[w][w2]);
  100.     puts("\n");
  101.       }
  102.     #endif
  103.  
  104.     if (NUMITEMS < 0) {
  105.       printf("\nNo menu information in file");
  106.       exit(1);
  107.     }
  108.     cls(LIGHTGRAY);          /* clear the display screen */
  109.  
  110.     jzscrprn(COPYWRITE,0,0,YELLOW);      /* print logo information */
  111.  
  112.     jzscrprn("LAST PROGRAM:",23,0,MAGENTA);
  113.     jzscrprn("ERROR CODE  :",24,0,MAGENTA);
  114.  
  115.     jzscrprn(wpgm,23,14,RED);        /* print program name */
  116.     jzscrprn(wstr,24,14,RED);        /* print error code */
  117.  
  118.     if ((wchoice = jzmenu(wmenu,WHITE,BLUE,NUMITEMS,"\001"))== -1)
  119.       exit(1);
  120.  
  121.     /* look for substitution parameters */
  122.  
  123.     for (w = 0 ; w < 10 ; w ++) {
  124.       if (strcmpi(wargv[wchoice][w],"?INP?") == 0) {
  125.     getinp(wstr,w);
  126.     wargv[wchoice][w] = realloc(wargv[wchoice][w],strlen(wstr)+1);
  127.     strcpy(wargv[wchoice][w],wstr);
  128.       }
  129.     }
  130.  
  131.     strcpy(wpgm,wprog[wchoice]);      /* get program name to invoke */
  132.  
  133.     cls(LIGHTGRAY);
  134.     jzscrprn("Invoking:",0,0,CYAN);
  135.     jzscrprn(wpgm,0,10,LIGHTCYAN);
  136.  
  137.     puts("\n");
  138.  
  139.     wresult = spawnv(P_WAIT,wargv[wchoice][0],wargv[wchoice]);
  140.  
  141.     itoa(wresult,wstr,10);        /* convert error code to string */
  142.  
  143.     printf("\n\nPress <Enter> to continue...");
  144.     jzbeep();
  145.  
  146.     while (getch() != 13) ;
  147.  
  148.   } while (-1);
  149.  
  150. }
  151.  
  152. getinp(fstr,fline)
  153. char *fstr;
  154. int fline;
  155. {
  156.  
  157.   char wnumstr[50];
  158.  
  159.   *fstr = 0;                    /* create null string */
  160.   sprintf(wnumstr,"Argv[%d]:",fline);
  161.   jzscrprn(wnumstr,fline+1,0,RED);         /* display Prompt */
  162.   jzinstr(fstr,35,fline+1,strlen(wnumstr)+1,GREEN,60L,"");  /* input string */
  163.  
  164. }
  165.  
  166.